home *** CD-ROM | disk | FTP | other *** search
/ BCI NET 2 / BCI NET 2.iso / archives / programming / source / xdme_1.84_src.lha / XDME / Src / Mod / Request.c < prev    next >
Encoding:
C/C++ Source or Header  |  1994-12-22  |  10.3 KB  |  450 lines

  1. /******************************************************************************
  2.  
  3.     MODULE
  4.     Request.c
  5.  
  6.     DESCRIPTION
  7.     Command frontend for the different ReqTools Requesters
  8.  
  9.     NOTES
  10.     Needs ReqTools.library >=v38
  11.  
  12.     BUGS
  13.     none known
  14.  
  15.     TODO
  16.     split for filereq
  17.  
  18.     EXAMPLES
  19.  
  20.     SEE ALSO
  21.  
  22.     INDEX
  23.  
  24.     HISTORY
  25.     11-09-94 b_noll created
  26.     14-09-94 b_noll command documentation
  27.     21-09-94 b_noll added DEFCMD/DEFHELP-support
  28.     24-09-94 b_noll "ReqCheck()" as macro
  29.     01-10-94 b_noll introduced DEFMESSAGE
  30.  
  31. ******************************************************************************/
  32.  
  33.  
  34. /**************************************
  35.           Includes
  36. **************************************/
  37.  
  38. #include <exec/types.h>
  39. #include <exec/memory.h>
  40. #include <exec/execbase.h>
  41. #include <libraries/dos.h>
  42. #include <intuition/intuition.h>
  43. #include <libraries/reqtools.h>
  44.  
  45. #include <proto/exec.h>
  46. #include <proto/dos.h>
  47. #include <proto/reqtools.h>
  48.  
  49. /* #include "xdme_base.h" */
  50. #include "defs.h"
  51.  
  52. /**************************************
  53.         Global Variables
  54. **************************************/
  55.  
  56. Prototype char ReqString[];
  57.  
  58. /**************************************
  59.       Internal Defines & Structures
  60. **************************************/
  61.  
  62.  
  63. /**************************************
  64.        Internal Variables
  65. **************************************/
  66.  
  67. char ReqString[MAXLINELEN];
  68. long ReqResult;
  69. DEFMESSAGE( _REQ_needing_reqtools, "%s:\n`reqtools.library' is needed for that Command!\n" )
  70. //const char *ReqE_NoReqLib = _REQ_needing_reqtools;
  71. #define ReqE_NoReqLib _REQ_needing_reqtools
  72.  
  73. /**************************************
  74.        Internal Prototypes
  75. **************************************/
  76.  
  77.  
  78. /**************************************
  79.          Macros
  80. **************************************/
  81.  
  82. #define ReqCheck()                  \
  83.     if (!ReqToolsBase) {            \
  84.     error (ReqE_NoReqLib,av[0]);\
  85.     return RET_FAIL;        \
  86.     } /* if */
  87.  
  88.  
  89. /**************************************
  90.          Implementation
  91. **************************************/
  92.  
  93.  
  94. /***************************************************
  95.         XDME COMMAND INTERFACE 11 Sep 1994
  96. ***************************************************/
  97.  
  98. /*
  99. *!
  100. *! >REQSTRING Title/A,Text/A,Gadgets/A,InitValue/A
  101. *!
  102. *!  Interface to the ReqTools StringRequester
  103. *!  Opens a synchroneous ReqTools Requester
  104. *!  with the given values
  105. *!
  106. *!  The Result is written into ReqResult
  107. *!  Cancelling the Requester sets globalflags.Abortcommand;
  108. *!
  109. *!  gadgets = "|"-separated List of Strings
  110. *!
  111. */
  112. /*DEFHELP #cmd requester REQSTRING title format gadgets defvalue - display a synch ReqTools StringRequest; the result is put in $REQRESULT. */
  113. DEFUSERCMD("reqstring",     4, CF_COK|CF_VWM|CF_ICO, int, do_reqstring, (void),)
  114. {
  115.     char *title   = av[1];
  116.     char *format  = av[2];
  117.     char *gadgets = av[3];
  118.     char *value   = av[4];
  119.  
  120.     ReqCheck();
  121.  
  122.     strcpy (ReqString, value);
  123.     ReqResult = rtGetString (ReqString, sizeof(ReqString), title, NULL,
  124.     RTGS_GadFmt, gadgets,
  125.     (format && *format)? RTGS_TextFmt: TAG_IGNORE, format,
  126.  
  127.     TAG_END);
  128.     if (ReqResult == FALSE)
  129.     SET_ABORTION( 1 );
  130.     return RET_SUCC;
  131. } /* do_reqstring */
  132.  
  133. /*
  134. *!
  135. *! >REQNUMBER Title/A,Text/A,Gadgets/A,InitValue/N/A,Minimum/N/A,Maximum/N/A
  136. *!
  137. *!  Interface to the ReqTools NumberRequester
  138. *!  Opens a synchroneous ReqTools Requester
  139. *!  with the given values
  140. *!
  141. *!  The Result is written into ReqResult
  142. *!  Cancelling the Requester sets globalflags.Abortcommand;
  143. *!
  144. *!  gadgets = "|"-separated List of Strings
  145. *!
  146. */
  147. /*DEFHELP #cmd requester REQNUMBER title format gadgets defvalue min max - display a synch ReqTools NumberRequest; the result is put in $REQRESULT. */
  148. DEFUSERCMD("reqnumber",     6, CF_COK|CF_VWM|CF_ICO, int, do_reqnumber, (void),)
  149. {
  150.     char *title   = av[1];
  151.     char *format  = av[2];
  152.     char *gadgets = av[3];
  153.     char *value   = av[4];
  154.     char *minimum = av[5];
  155.     char *maximum = av[6];
  156.  
  157.     ULONG longnum = atol(value);
  158.  
  159.     ReqCheck();
  160.  
  161.     ReqResult = rtGetLong (&longnum, title, NULL,
  162.     RTGL_Min,     atol(minimum),
  163.     RTGL_Max,     atol(maximum),
  164.     RTGL_GadFmt,  gadgets,
  165.     (format && *format)? RTGL_TextFmt: TAG_IGNORE, format,
  166.  
  167.     RT_Window, active_window(), TAG_END);
  168.     if (ReqResult == FALSE)
  169.     SET_ABORTION( 1 );
  170.     else
  171.     strcpy (ReqString, ltostr(longnum));
  172.     return RET_SUCC;
  173. } /* do_reqnumber */
  174.  
  175. /*
  176. *!
  177. *! >REQPALETTE Title/A,InitValue/N/A
  178. *!
  179. *!  Interface to the ReqTools PaletteRequester
  180. *!  Opens a synchroneous ReqTools Requester
  181. *!  with the given values
  182. *!
  183. *!  The Result is written into ReqResult
  184. *!  Cancelling the Requester sets globalflags.Abortcommand;
  185. *!
  186. */
  187. /*DEFHELP #cmd requester REQPALETTE title defvalue - display a synch ReqTools PaletteRequest; the result is put in $REQRESULT. */
  188. DEFUSERCMD("reqpalette",    2, CF_COK|CF_VWM|CF_ICO, int, do_reqpalette, (void),)
  189. {
  190.     char *title = av[1];
  191.     char *value = av[2];
  192.  
  193.     ReqCheck();
  194.  
  195.     ReqResult = rtPaletteRequest(title, NULL,
  196.     RTPA_Color, atol(value),
  197.  
  198.     RT_Window, active_window(), TAG_END);
  199.     if (ReqResult == -1)
  200.     SET_ABORTION( 1 );
  201.     else
  202.     strcpy (ReqString, ltostr(ReqResult));
  203.     return RET_SUCC;
  204. } /* do_reqpalette */
  205.  
  206.  
  207. /*
  208. *!
  209. *! >REQUEST Title/A,Text/A,Gadgets/A
  210. *!
  211. *!  Interface to the ReqTools EZ Requester
  212. *!  Opens a synchroneous ReqTools Requester
  213. *!  with the given values
  214. *!
  215. *!  The Result is written into ReqResult
  216. *!
  217. *!  gadgets = "|"-separated List of Strings
  218. *!
  219. */
  220. /*DEFHELP #cmd requester REQUEST title body gadgets - display a synch ReqTools EZRequest; the result is put in $REQRESULT. */
  221. DEFUSERCMD("request",       3, CF_COK|CF_VWM|CF_ICO, int, do_request, (void),)
  222. {
  223.     char *title   = av[1];
  224.     char *body      = av[2];
  225.     char *gadgets = av[3];
  226.  
  227.     ReqCheck();
  228.  
  229.     ReqResult = rtEZRequestTags(body, gadgets, NULL, NULL,
  230.     RTEZ_ReqTitle, title,
  231.  
  232.     RT_Window, active_window(), TAG_END);
  233.     strcpy (ReqString, ltostr(ReqResult));
  234.     return RET_SUCC;
  235. } /* do_request */
  236.  
  237. /*
  238. *!
  239. *! >REQFILE Title/A,Flags/A,InitValue/A
  240. *!
  241. *!  Interface to the ReqTools FileRequester
  242. *!  Opens a synchroneous ReqTools Requester
  243. *!  with the given values
  244. *!
  245. *!  The Result is written into ReqResult
  246. *!  Cancelling the Requester sets globalflags.Abortcommand;
  247. *!
  248. *!  flags = [PSD]*;
  249. *!         P=Pattern On; S=Save Mode; D=Director Mode;
  250. *!
  251. */
  252. /*DEFHELP #cmd requester REQFILE title flags defvalue - display a synch ReqTools FileRequest; the result is put in $REQRESULT. */
  253. DEFUSERCMD("reqfile",       3, CF_COK|CF_VWM|CF_ICO, int, do_reqfile, (void),)
  254. {
  255.     char *title = av[1];
  256.     char *flags = av[2];
  257.     char *value = av[3];
  258.     unsigned long flg = FREQF_NOBUFFER;
  259.     struct rtFileRequester *filereq;
  260.     char *dir;
  261.  
  262.     ReqCheck();
  263.  
  264.     while (*flags)
  265.     switch (*(flags++)) {
  266.     case 's':
  267.     case 'S':
  268.         flg |= FREQF_SAVE;
  269.         break;
  270.     case 'd':
  271.     case 'D':
  272.         flg |= FREQF_NOFILES;
  273.         break;
  274.     case 'p':
  275.     case 'P':
  276.         flg |= FREQF_PATGAD;
  277.         break;
  278.     default:
  279. DEFMESSAGE( _REQ_unknown_flag, "%s:\nUnknown Flag `%c'")
  280.         error (_REQ_unknown_flag, av[0], *flags);
  281.         return RET_FAIL;
  282.     }
  283.  
  284.     if (!(dir = malloc(PATHSIZE))) {
  285.     nomemory();
  286.     return RET_FAIL;
  287.     } /* if */
  288.  
  289.     splitpath (value, tmp_buffer, dir);
  290.  
  291.     if ((filereq = rtAllocRequestA (RT_FILEREQ, NULL))) {
  292.  
  293.     rtChangeReqAttr (filereq,
  294.         RTFI_Dir, dir,
  295.         (flg & FREQF_PATGAD)? RTFI_MatchPat: TAG_IGNORE, pattern,
  296.         TAG_DONE);
  297.  
  298.     ReqResult = rtFileRequest (filereq, tmp_buffer, title,
  299.         RTFI_Flags, flg,
  300.         RT_Window,     active_window(),
  301.         RTFI_Height, Ep->config.aslheight,
  302.         TAG_END);
  303.  
  304.     if (ReqResult) {
  305.         strcpy (ReqString, filereq->Dir);
  306.         AddPart(ReqString, tmp_buffer, sizeof(ReqString));
  307.     } else
  308.         SET_ABORTION( 1 );
  309.     rtFreeRequest (filereq);
  310.     } else
  311.     nomemory();
  312.  
  313.     free(dir);
  314.  
  315.     return RET_SUCC;
  316. } /* do_reqfile */
  317.  
  318. /* ;
  319. int do_reqchoice (void)
  320. {
  321.     char *title = av[1];
  322.  
  323.     ReqCheck();
  324.  
  325.     ...
  326.  
  327.     return RET_SUCC;
  328. } /* do_reqchoice */
  329.  
  330.  
  331. #if 0
  332.  /*DEFHELP #cmd requester REQFONT title flags defvalue - display a synch ReqTools FontRequest; the result is put in $REQRESULT. */
  333.  DEFUSERCMD("reqfont2", 3, CF_VWM|CF_ICO|CF_COK, void, do_reqfont2, (void),)
  334. {
  335.     struct rtFontRequester *fontreq;
  336.     char *title = av[1];
  337.     char *flags = av[2];
  338.     char *value = av[3];
  339.     char *style = "";
  340.     unsigned long flg = 0;
  341.     unsigned long stl = FS_NORMAL;
  342.     unsigned long hig = 0;
  343.  
  344.     ReqCheck();
  345.  
  346.     while (*flags)
  347.     switch (*(flags++) | 32) {
  348.     case 'f':
  349.         flg |= FREQF_FIXEDWIDTH;
  350.         break;
  351.     case 'c':
  352.         flg |= FREQF_SCALE;
  353.         break;
  354.     case 's':
  355.         flg |= FREQF_STYLE;
  356.         break;
  357.     default:
  358. DEFMESSAGE( _REQ_unknown_flag, "%s:\nUnknown Flag `%c'")
  359.         error (_REQ_unknown_flag, av[0], *flags);
  360.         return RET_FAIL;
  361.     }
  362.  
  363. #if 0
  364.     while (*style)
  365.     switch (*(style++) | 32) {
  366.     case 'b':
  367.         stl |= FSF_BOLD;
  368.         break;
  369.     case 'i':
  370.         stl |= FSF_ITALIC;
  371.         break;
  372.     case 'u':
  373.     case '_':
  374.         stl |= FSF_UNDERLINED;
  375.         break;
  376.     default:
  377. DEFMESSAGE( _REQ_unknown_style, "%s:\nUnknown style `%c'")
  378.         error (_REQ_unknown_style, av[0], *flags);
  379.         return RET_FAIL;
  380.     }
  381.  
  382.     if (stl && !(flg & FREQF_STYLE)) {
  383. DEFMESSAGE( _REQ_using_styles_wo_styleflag, "%s:\nUsing Fontstyles w/ the Styleflag unset")
  384.     error (_REQ_using_styles:wo_styleflag, av[0]);
  385.     return RET_FAIL;
  386.     }
  387. #endif
  388.  
  389.     sscanf (value, "%s %ld", &ReqString[2], &ReqResult);
  390.  
  391.     if ((fontreq = rtAllocRequestA (RT_FONTREQ, NULL))) {
  392.  
  393.     rtChangeReqAttr (fontreq,
  394.         stl? RTFO_FontStyle:  TAG_IGNORE, stl,
  395.         RTFO_FontHeight,  ReqResult,
  396.         RTFO_FontName,      &ReqString[2],
  397.         TAG_DONE);
  398.  
  399.     ReqResult = rtFontRequest (fontreq, title,
  400.         RTFO_MinHeight, 6,
  401.         RTFO_MaxHeight, 24,
  402.         RTFO_Flags,     flg,
  403.  
  404.         RT_Window,     active_window(),
  405.         RTFO_Height, Ep->config.aslheight,
  406.         TAG_END);
  407.  
  408.     if (ReqResult) {
  409.         FONT *font;
  410.         font = (FONT *)GetFont (fontreq->Attr.ta_Name, (short)fontreq->Attr.ta_YSize );
  411.         if (font)
  412.         CloseFont (font);
  413.         else
  414.         SET_ABORTION( 1 );
  415.  
  416.         sprintf (ReqString, "%s %d",
  417.                     fontreq->Attr.ta_Name,
  418.                     (int)fontreq->Attr.ta_YSize );
  419.     } else
  420.         SET_ABORTION(Ep,1);
  421.  
  422.     rtFreeRequest (fontreq);
  423.     } else
  424.     nomemory ();
  425.  
  426. } /* do_reqfont */
  427. #endif
  428.  
  429.  
  430.  
  431.  
  432.  
  433.  
  434. #ifdef SPC_VAR
  435.  
  436. global const str reqresult = %{
  437.     reference = "ReqString";
  438.     help      = %[
  439.     Result of the recent call to any of the commands Request, ReqString,
  440.     ReqNumber, ReqPalette or ReqFile, assuming the requester command was
  441.     not aborted nor cancelled.
  442.     %];
  443. %};
  444.  
  445. #endif
  446.  
  447. /******************************************************************************
  448. *****  END Request.c
  449. ******************************************************************************/
  450.